import 'package:get/get.dart';
import '../../../modules/message/controllers/message_controller.dart';
import '../../../modules/home/controllers/home_controller.dart';
import '../../../modules/device/controllers/device_controller.dart';
import '../../../modules/mine/controllers/mine_controller.dart';
import '../../../data/services/user_service.dart';

class TabbarController extends GetxController {
  // 当前选中的tab索引
  var currentIndex = 0.obs;

  // 用户服务实例
  final UserService _userService = Get.find<UserService>();

  // 未选中状态的图标列表
  List<String> iconList = [
    'assets/tabbar/home.png',
    'assets/tabbar/device.png',
    'assets/tabbar/message.png',
    'assets/tabbar/mine.png',
  ];

  // 选中状态的图标列表
  List<String> selectedIconList = [
    'assets/tabbar/home_selected.png',
    'assets/tabbar/device_selected.png',
    'assets/tabbar/message_selected.png',
    'assets/tabbar/mine_selected.png',
  ];

  // 标题列表
  List<String> titleList = ['首页', '设备', '消息', '我的'];

  @override
  void onInit() {
    super.onInit();
    // 提前初始化所有页面的Controller，避免切换时的null值错误
    _initAllControllers();

    // 检查是否需要刷新数据（重新登录后）
    _checkAndRefreshDataIfNeeded();
  }

  @override
  void onReady() {
    super.onReady();
  }

  @override
  void onClose() {
    super.onClose();
  }

  // 初始化所有Controller
  void _initAllControllers() {
    // 确保所有页面的Controller都已初始化（不使用permanent，允许销毁重建）
    if (!Get.isRegistered<HomeController>()) {
      Get.put(HomeController());
    }

    if (!Get.isRegistered<DeviceController>()) {
      Get.put(DeviceController());
    }

    if (!Get.isRegistered<MessageController>()) {
      Get.put(MessageController());
    }

    if (!Get.isRegistered<MineController>()) {
      Get.put(MineController());
    }
  }

  // 切换tab
  void changeTabIndex(int index) {
    print('TabbarController: 切换tab到索引 $index');
    currentIndex.value = index;
    print('TabbarController: currentIndex更新为 ${currentIndex.value}');

    // 刷新首页数据
    if (Get.isRegistered<HomeController>()) {
      try {
        Get.find<HomeController>().refreshData();
      } catch (e) {
        print('刷新首页数据失败: $e');
      }
    }

    // 切换到我的tab时，重新获取用户信息
    if (index == 3) {
      if (Get.isRegistered<MineController>()) {
        try {
          final mineController = Get.find<MineController>();
          mineController.getUserInfo();
          print('切换到我的tab，已刷新用户信息');
        } catch (e) {
          print('刷新我的页面数据失败: $e');
        }
      }
    }
  }

  /// 检查并在需要时刷新数据
  void _checkAndRefreshDataIfNeeded() {
    // 延迟执行，确保所有控制器都已正确初始化
    Future.delayed(const Duration(milliseconds: 200), () {
      try {
        // 检查是否需要刷新数据
        if (_userService.shouldRefreshData()) {
          print('检测到需要刷新数据，开始刷新...');
          refreshAllData();
          // 清除刷新标记
          _userService.clearRefreshFlag();
        } else {
          print('无需刷新数据');
        }
      } catch (e) {
        print('检查数据刷新需求时出错: $e');
      }
    });
  }

  /// 重新加载所有页面数据
  void refreshAllData() {
    try {
      // 重新加载首页数据
      if (Get.isRegistered<HomeController>()) {
        final homeController = Get.find<HomeController>();
        try {
          homeController.refreshData();
        } catch (e) {
          print('刷新首页数据失败: $e');
        }
      }

      // 重新加载设备页面数据
      if (Get.isRegistered<DeviceController>()) {
        final deviceController = Get.find<DeviceController>();
        try {
          deviceController.refreshData();
        } catch (e) {
          print('刷新设备页面数据失败: $e');
        }
      }

      // 重新加载消息页面数据
      if (Get.isRegistered<MessageController>()) {
        final messageController = Get.find<MessageController>();
        try {
          messageController.refreshData();
        } catch (e) {
          print('刷新消息页面数据失败: $e');
        }
      }

      print('TabBar所有页面数据刷新完成');
    } catch (e) {
      print('刷新TabBar数据时出错: $e');
    }
  }
}
